/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number[]}
 * @description 
 */

var maxSlidingWindow = function (nums, k) {
    const len = nums.length
    const res = []
    const deque = []
    for (let i = 0; i < len; i++) {
        // 如果队列存在 且队列最后一位要 小于当前元素
        while (deque.length && nums[deque[deque.length - 1]] < nums[i]) {
            // 将队列最后一个元素移除
            deque.pop()
        }
        deque.push(i)
        // 当队列存在 且其头元素的索引超过了滑动窗口
        while (deque.length && deque[0] <= i - k) {
            deque.shift()
        }
        // 当已经遍历到的元素已经到了k个时 
        if (i >= k - 1) {
            // 队列第一个最大的元素的索引 将其所对应的nums[i] 推入res
            res.push(nums[deque[0]])
        }
    }
    return res
};

// 1   
// 3   
// 3 -1    [3]
// 3 -1 -3     [3,3]
// 3 -1 -3 -> 3 -1 -> 3 -> 0 -> 5  [3,3,5]
// 5 3     [3,3,5,5]
// 5 3 -> 5 -> 0 -> 6 [3,3,5,5,6]
// 6 -> 0 -> 7 [3,3,5,5,6,7]

7
7 2 [7]
7 2 4 -> 7 4 -> [7,7]


